﻿using System.Collections.Generic;
using UI.Base;
using UnityEngine;

namespace UI.Login.Panel
{
    public class ChooseServerPanel : BasePanel<ChooseServerPanel>
    {
        //左右两个 滚动视图 的位置信息 主要用来在下面创建子对象
        public Transform svLeft;
        public Transform svRight;
        //上次登录的服务器名
        public UILabel labName;
        public UISprite sprState;

        //当前选择的服务器区间文字
        public UILabel labNowServer;

        //记录之前显示的 单个服务器按钮们
        private List<GameObject> itemList = new List<GameObject>();
        public override void Init()
        {
            //因为左侧 按钮 服务器数据 进行游戏的时候 是不会变化的 所以初始化一次即可

            //动态创建左侧按钮
            ServerInfo info = LoginMgr.Instance.ServerInfo;

            //得到要循环几次 按5区一间隔区分
            int num = info.serverDic.Count / 5 + 1;
            for (int i = 0; i < num; i++)
            {
                //创建一个一个的按钮
                GameObject item = Instantiate(Resources.Load<GameObject>("UI/btnServer"));
                //设置父对象 设置位置
                item.transform.SetParent(svLeft, false);
                item.transform.localPosition = new Vector3(-79, 58, 0) + new Vector3(0, -65 * i, 0);
                //得到脚本 进行按钮信息初始化
                ServerItem serverItem = item.GetComponent<ServerItem>();
                //得到当前按钮 代表的服务器区间
                int beginIndex = 5 * i + 1;
                int endIndex = 5 * (i + 1);
                //判断 最大 是不是超过的 服务器的总数
                if (endIndex > info.serverDic.Count)
                    endIndex = info.serverDic.Count;
                serverItem.InitInfo(beginIndex, endIndex);
            }
        }

        //提供方法给外部 用于更新面板右侧的按钮显示内容
        public void UpdatePanel(int beginIndex, int endIndex)
        {
            //更新当前选择的服务器区间 显示
            labNowServer.text = "服务器" + beginIndex + "—" + endIndex + "区";

            //创建新的按钮之前 应该删除老的
            for (int i = 0; i < itemList.Count; i++)
            {
                //删除依附的对象
                Destroy(itemList[i].gameObject);
            }
            //删除后 并没有清空列表 所以需要手动清空列表
            itemList.Clear();

            //创建新的按钮
            Server nowInfo;
            for (int i = beginIndex; i <= endIndex; i++)
            {
                //获取单个服务器数据
                nowInfo = LoginMgr.Instance.ServerInfo.serverDic[i];

                //动态创建按钮 放置位置即可
                GameObject serverItem = Instantiate(Resources.Load<GameObject>("UI/btnChooseServer"));
                serverItem.transform.SetParent(svRight, false);
                serverItem.transform.localPosition = new Vector3(-8, 61, 0) + new Vector3((i - 1) % 5 % 2 * 300, (i - 1) % 5 / 2 * -80, 0);

                //得到按钮上的脚本 根据服务器信息 更新内容即可
                ServerChooseItem chooseItem = serverItem.GetComponent<ServerChooseItem>();
                chooseItem.InitInfo(nowInfo);

                //创建成功后 把它记录到列表中 方便下次删除
                itemList.Add(serverItem);
            }
        }
        public override void ShowMe()
        {
            base.ShowMe();
            //初始化面板显示
            //1.初始化上一次服务器相关内容显示
            if (LoginMgr.Instance.LoginData.frontServerID == 0)
            {
                labName.text = "无";
                sprState.gameObject.SetActive(false);
            }
            else
            {
                //得到单个服务器信息 然后去显示
                Server info = LoginMgr.Instance.ServerInfo.serverDic[LoginMgr.Instance.LoginData.frontServerID];
                //拼接显示上一次的服务器名字
                labName.text = info.id + "区  " + info.name;
                sprState.gameObject.SetActive(true);
                //根据状态 改变图片的显示
                switch (info.state)
                {
                    case 0:
                        sprState.gameObject.SetActive(false);
                        break;
                    case 1:
                        sprState.spriteName = "ui_DL_liuchang_01";
                        break;
                    case 2:
                        sprState.spriteName = "ui_DL_fanhua_01";
                        break;
                    case 3:
                        sprState.spriteName = "ui_DL_huobao_01";
                        break;
                    case 4:
                        sprState.spriteName = "ui_DL_weihu_01";
                        break;
                }
            }
            //2.更新右侧按钮显示
            //最大索引要判断
            UpdatePanel(1, 5 > LoginMgr.Instance.ServerInfo.serverDic.Count ? LoginMgr.Instance.ServerInfo.serverDic.Count : 5);
        }
    }
}